import request from '@renderer/utils/request'
import { Session } from '@renderer/utils/storage'
import * as CryptoJS from 'crypto-js'
/**
 * https://www.ietf.org/rfc/rfc6749.txt
 * OAuth 协议 4.3.1 要求格式为 form 而不是 JSON 注意！
 */
const FORM_CONTENT_TYPE = 'application/x-www-form-urlencoded'

/**
 * 登录
 * @param data
 */
export const login = (data: any) => {
  // 使用环境变量中的客户端信息生成Basic认证字符串，并进行Base64编码
  const basicAuth = 'Basic ' + window.btoa('custom:custom')
  // 将生成的Basic认证字符串存储到会话中
  Session.set('basicAuth', basicAuth)
  // 初始化加密后的密码为原始密码

  const key = CryptoJS.enc.Utf8.parse('thanks,pig4cloud')
  // 加密
  const encrypted = CryptoJS.AES.encrypt(data.password, key, {
    iv: key,
    mode: CryptoJS.mode.CFB,
    padding: CryptoJS.pad.NoPadding
  })
  const encPassword = encrypted.toString()

  // 发送POST请求进行登录验证
  return request({
    // 登录接口地址
    url: '/auth/oauth2/token',
    // 请求方法为POST
    method: 'post',
    // 请求体数据，使用解构赋值将原始数据和加密后的密码合并
    data: { ...data, password: encPassword },
    // 设置请求头信息
    headers: {
      // 标记跳过Token验证
      skipToken: true,
      // 设置Authorization头，包含Basic认证信息
      Authorization: basicAuth,
      // 设置Content-Type为表单内容类型
      'Content-Type': FORM_CONTENT_TYPE
    }
  })
}

export const refreshTokenApi = (refresh_token: string) => {
  const grant_type = 'refresh_token'
  const scope = 'test'
  // 获取当前选中的 basic 认证信息
  const basicAuth = Session.get('basicAuth')

  return request({
    url: '/auth/oauth2/token',
    headers: {
      skipToken: true,
      Authorization: basicAuth,
      'Content-Type': FORM_CONTENT_TYPE
    },
    method: 'post',
    data: { refresh_token, grant_type, scope }
  })
}

/**
 * 获取用户信息
 */
export const getUserInfo = () => {
  return request({
    url: '/admin/tocCustom/info',
    method: 'get'
  })
}

export const logout = () => {
  return request({
    url: '/auth/token/logout',
    method: 'delete'
  })
}
